#region License

/* Copyright (c) 2008, Dusty Candland
 * 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 * * Neither the name of Dusty Candland nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#endregion

using System;
using System.Collections.Specialized;

namespace NS3Library.Amazon
{
    public class AwsObject : AbstractS3Object, IHaveAwsS3Status
    {
        private readonly AwsStatus _awsStatus;

        public AwsObject(string bucketName, string key, DateTime lastModified, string eTag, int size, IS3Owner owner,
                         IS3StorageClass storageClass, byte[] content, NameValueCollection metadata)
            : base(bucketName, key, lastModified, eTag, size, owner, storageClass, content, metadata)
        {
        }

        public AwsObject(string bucketName, string key, byte[] content, NameValueCollection metadata)
            : base(bucketName, key, content, metadata)
        {
        }

        public AwsObject(IS3Object s3Object, AwsStatus status)
            : this(s3Object.BucketName, s3Object.Key, s3Object.LastModified,
                   s3Object.ETag, s3Object.Size, s3Object.Owner, s3Object.StorageClass,
                   s3Object.Content, s3Object.Metadata, status)
        {
        }

        public AwsObject(string bucketName, string key, DateTime lastModified, string eTag, int size, IS3Owner owner,
                         IS3StorageClass storageClass, byte[] content, NameValueCollection metadata, AwsStatus awsStatus)
            : base(bucketName, key, lastModified, eTag, size, owner, storageClass, content, metadata)
        {
            _awsStatus = awsStatus;
        }

        public AwsObject(string bucketName, string key, byte[] content, NameValueCollection metadata,
                         AwsStatus awsStatus)
            : base(bucketName, key, content, metadata)
        {
            _awsStatus = awsStatus;
        }

        public AwsStatus AwsStatus
        {
            get { return _awsStatus; }
        }

        public NameValueCollection Headers()
        {
            var headers = new NameValueCollection();
            if (Metadata != null)
                headers.Add(Metadata);
            return headers;
        }
    }
}